ASTæäœãšãã³ãã¬ãŒãã·ã¹ãã ã«ããJavaScriptã³ãŒãçæã®äžçãæ¢æ±ãã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã«ãåçã§å¹ççãªã³ãŒããœãªã¥ãŒã·ã§ã³ãæ§ç¯ããå®è·µçãã¯ããã¯ãåŠã³ãŸãã
JavaScriptã³ãŒãçæïŒASTæäœãšãã³ãã¬ãŒãã·ã¹ãã ã®åŸ¹åºè§£èª¬
çµ¶ããé²åãããœãããŠã§ã¢éçºã®äžçã«ãããŠãåçã«ã³ãŒããçæããèœåã¯åŒ·åãªã¹ãã«ã§ããJavaScriptã¯ããã®æè»æ§ãšåºç¯ãªæ¡çšã«ãããäž»ã«æœè±¡æ§ææšïŒASTïŒæäœãšãã³ãã¬ãŒãã·ã¹ãã ã®äœ¿çšãéããŠããã®ããã®å ç¢ãªã¡ã«ããºã ãæäŸããŸãããã®ããã°èšäºã§ã¯ããããã®ãã¯ããã¯ãæãäžããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«é©ããå¹ççã§é©å¿æ§ã®ããã³ãŒããœãªã¥ãŒã·ã§ã³ãäœæããããã®ç¥èãæäŸããŸãã
ã³ãŒãçæã®çè§£
ã³ãŒãçæãšã¯ã仿§ããã³ãã¬ãŒãããŸãã¯ããé«ã¬ãã«ã®è¡šçŸãªã©ãå¥ã®åœ¢åŒã®å ¥åãããœãŒã¹ã³ãŒããèªåçã«äœæããããã»ã¹ã§ããããã¯çŸä»£ã®ãœãããŠã§ã¢éçºã®åºç€ã§ããã以äžãå¯èœã«ããŸãïŒ
- çç£æ§ã®åäžïŒå埩çãªã³ãŒãã£ã³ã°ã¿ã¹ã¯ãèªååããéçºè ããããžã§ã¯ãã®ããæŠç¥çãªåŽé¢ã«éäžã§ããããã«ããŸãã
- ã³ãŒãã®ä¿å®æ§ïŒã³ãŒãããžãã¯ãåäžã®ãœãŒã¹ã«éäžãããæŽæ°ããšã©ãŒä¿®æ£ã容æã«ããŸãã
- ã³ãŒãå質ã®åäžïŒèªåçæãéããŠã³ãŒãã£ã³ã°æšæºãšãã¹ããã©ã¯ãã£ã¹ã匷å¶ããŸãã
- ã¯ãã¹ãã©ãããã©ãŒã äºææ§ïŒããŸããŸãªãã©ãããã©ãŒã ãç°å¢ã«åãããã³ãŒããçæããŸãã
æœè±¡æ§ææšïŒASTïŒã®åœ¹å²
æœè±¡æ§ææšïŒASTïŒã¯ãç¹å®ã®ããã°ã©ãã³ã°èšèªã§æžããããœãŒã¹ã³ãŒãã®æœè±¡çãªæ§ææ§é ãæšæ§é ã§è¡šçŸãããã®ã§ãããœãŒã¹ã³ãŒãå šäœã衚ãå ·è±¡æ§ææšãšã¯ç°ãªããASTã¯ã³ãŒãã®æå³ã«é¢ä¿ã®ãªã詳现ãçç¥ããŸããASTã¯ä»¥äžã®ç¹ã§æ¥µããŠéèŠã§ãïŒ
- ã³ã³ãã€ã©ïŒASTã¯ãœãŒã¹ã³ãŒããè§£æããããããã·ã³ã³ãŒãã«ç¿»èš³ããããã®åºç€ã圢æããŸãã
- ãã©ã³ã¹ãã€ã©ïŒBabelãTypeScriptã®ãããªããŒã«ã¯ãããèšèªããŒãžã§ã³ãæ¹èšã§æžãããã³ãŒããå¥ã®ãã®ã«å€æããããã«ASTãå©çšããŸãã
- ã³ãŒãåæããŒã«ïŒãªã³ã¿ãŒãã³ãŒããã©ãŒããã¿ãŒãéçã¢ãã©ã€ã¶ãŒã¯ãã³ãŒããçè§£ãæé©åããããã«ASTã䜿çšããŸãã
- ã³ãŒããžã§ãã¬ãŒã¿ïŒASTã«ãããã³ãŒãæ§é ãããã°ã©ã çã«æäœããããšãå¯èœã«ãªããæ¢åã®æ§é ã仿§ã«åºã¥ããŠæ°ããã³ãŒããäœæã§ããŸãã
ASTæäœïŒè©³çŽ°è§£èª¬
ASTã®æäœã«ã¯ãããã€ãã®ã¹ããããå«ãŸããŸãïŒ
- è§£æïŒParsingïŒïŒãœãŒã¹ã³ãŒããè§£æããŠASTãäœæããŸããããã«ã¯`acorn`ã`esprima`ããŸãã¯ïŒäžéšã®JavaScriptç°å¢ã§ã¯ïŒçµã¿èŸŒã¿ã®`parse`ã¡ãœãããªã©ã®ããŒã«ã䜿çšãããŸããçµæãšããŠãã³ãŒãã®æ§é ã衚ãJavaScriptãªããžã§ã¯ããçæãããŸãã
- èµ°æ»ïŒTraversalïŒïŒå€æŽãŸãã¯åæãããããŒããç¹å®ããããã«ASTãèµ°æ»ããŸãã`estraverse`ã®ãããªã©ã€ãã©ãªã¯ããã«åœ¹ç«ã¡ãããªãŒå ã®ããŒãã蚪ããŠæäœããããã®äŸ¿å©ãªã¡ãœãããæäŸããŸããããã«ã¯ãããªãŒãæ©ããåããŒãã蚪ããããŒãã®ã¿ã€ãã«åºã¥ããŠã¢ã¯ã·ã§ã³ãå®è¡ããããšããã°ãã°å«ãŸããŸãã
- 倿ïŒTransformationïŒïŒASTå ã®ããŒãã倿Žã远å ããŸãã¯åé€ãããŸããããã«ã¯ã倿°åã®å€æŽãæ°ããã¹ããŒãã¡ã³ãã®æ¿å ¥ããŸãã¯ã³ãŒãæ§é ã®åç·šæãå«ãŸããããšããããŸãããããã³ãŒãçæã®äžæ žã§ãã
- ã³ãŒãçæïŒã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ïŒïŒå€æŽãããASTã¯ã`escodegen`ïŒestraverseäžã«æ§ç¯ãããŠããŸãïŒã`astring`ãªã©ã®ããŒã«ã䜿çšããŠãœãŒã¹ã³ãŒãã«æ»ãããŸããããã«ãããæçµçãªåºåãçæãããŸãã
å®è·µäŸïŒå€æ°åã®å€æŽ
äŸãã°ã`oldVariable`ãšããååã®å€æ°ã®ãã¹ãŠã®åºçŸç®æã`newVariable`ã«å€æŽããããšããŸãã`acorn`ã`estraverse`ã`escodegen`ã䜿çšããŠãããè¡ãæ¹æ³ã¯æ¬¡ã®ãšããã§ãïŒ
const acorn = require('acorn');
const estraverse = require('estraverse');
const escodegen = require('escodegen');
const code = `
const oldVariable = 10;
const result = oldVariable + 5;
console.log(oldVariable);
`;
const ast = acorn.parse(code, { ecmaVersion: 2020 });
estraverse.traverse(ast, {
enter: (node, parent) => {
if (node.type === 'Identifier' && node.name === 'oldVariable') {
node.name = 'newVariable';
}
}
});
const newCode = escodegen.generate(ast);
console.log(newCode);
ãã®äŸã¯ãASTãè§£æãèµ°æ»ã倿ããŠå€æ°åã®å€æŽãå®çŸããæ¹æ³ã瀺ããŠããŸããåãããã»ã¹ããã¡ãœããåŒã³åºããã¯ã©ã¹å®çŸ©ãã³ãŒããããã¯å šäœãªã©ãããè€éãªå€æã«æ¡åŒµããããšãã§ããŸãã
ã³ãŒãçæã®ããã®ãã³ãã¬ãŒãã·ã¹ãã
ãã³ãã¬ãŒãã·ã¹ãã ã¯ãç¹ã«äºåå®çŸ©ããããã¿ãŒã³ãæ§æã«åºã¥ããŠã³ãŒããçæããããã®ãããæ§é åãããã¢ãããŒããæäŸããŸãããããã¯ã³ãŒãçæã®ããžãã¯ãã³ã³ãã³ãããåé¢ããããã¯ãªãŒã³ãªã³ãŒããšå®¹æãªä¿å®æ§ãå¯èœã«ããŸãããããã®ã·ã¹ãã ã¯éåžžããã¬ãŒã¹ãã«ããŒãšããžãã¯ãå«ããã³ãã¬ãŒããã¡ã€ã«ãšããããã®ãã¬ãŒã¹ãã«ããŒãåããããã®ããŒã¿ã§æ§æãããŸãã
人æ°ã®JavaScriptãã³ãã¬ãŒããšã³ãžã³ïŒ
- Handlebars.jsïŒã·ã³ãã«ã§åºã䜿çšãããŠãããããŸããŸãªã¢ããªã±ãŒã·ã§ã³ã«é©ããŠããŸãããã³ãã¬ãŒãããHTMLãJavaScriptã³ãŒããçæããã®ã«é©ããŠããŸãã
- MustacheïŒããžãã¯ã¬ã¹ã®ãã³ãã¬ãŒããšã³ãžã³ã§ãé¢å¿ã®åé¢ãæãéèŠèŠãããå Žåã«ãã䜿çšãããŸãã
- EJS (Embedded JavaScript)ïŒHTMLãã³ãã¬ãŒãå ã«çŽæ¥JavaScriptãåã蟌ã¿ãŸãããã³ãã¬ãŒãå ã§è€éãªããžãã¯ã蚱容ããŸãã
- Pug (æ§Jade)ïŒã¯ãªãŒã³ã§ã€ã³ãã³ãããŒã¹ã®æ§æãæã€é«æ§èœãªãã³ãã¬ãŒããšã³ãžã³ãããããªã¹ããªã¢ãããŒãã奜ãéçºè ã«æ¯æãããŠããŸãã
- NunjucksïŒJinja2ã«è§Šçºãããæè»ãªãã³ãã¬ãŒãèšèªãç¶æ¿ããã¯ããªã©ã®æ©èœãæäŸããŸãã
Handlebars.jsã®äœ¿çšäŸïŒ
Handlebars.jsã䜿çšããŠJavaScriptã³ãŒããçæããç°¡åãªäŸãèŠãŠã¿ãŸããããããŒã¿é åã«åºã¥ããŠäžé£ã®é¢æ°å®çŸ©ãçæããå¿ èŠããããšããŸãããã³ãã¬ãŒããã¡ã€ã«ïŒäŸïŒ`functionTemplate.hbs`ïŒãšããŒã¿ãªããžã§ã¯ããäœæããŸãã
functionTemplate.hbsïŒ
{{#each functions}}
function {{name}}() {
console.log("Executing {{name}}");
}
{{/each}}
JavaScriptã³ãŒãïŒ
const Handlebars = require('handlebars');
const fs = require('fs');
const templateSource = fs.readFileSync('functionTemplate.hbs', 'utf8');
const template = Handlebars.compile(templateSource);
const data = {
functions: [
{ name: 'greet' },
{ name: 'calculateSum' },
{ name: 'displayMessage' }
]
};
const generatedCode = template(data);
console.log(generatedCode);
ãã®äŸã¯ããã³ãã¬ãŒããããŒãããã³ã³ãã€ã«ããããŒã¿ãæäŸããåºåãçæãããšããåºæ¬çãªããã»ã¹ã瀺ããŠããŸããçæãããã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãïŒ
function greet() {
console.log("Executing greet");
}
function calculateSum() {
console.log("Executing calculateSum");
}
function displayMessage() {
console.log("Executing displayMessage");
}
Handlebarsã¯ãã»ãšãã©ã®ãã³ãã¬ãŒãã·ã¹ãã ãšåæ§ã«ãååŸ©ãæ¡ä»¶ä»ãããžãã¯ããã«ããŒé¢æ°ãªã©ã®æ©èœãæäŸããè€éãªã³ãŒãæ§é ãæ§é åããå¹ççãªæ¹æ³ã§çæããææ®µãæäŸããŸãã
ASTæäœãšãã³ãã¬ãŒãã·ã¹ãã ã®æ¯èŒ
ASTæäœãšãã³ãã¬ãŒãã·ã¹ãã ã«ã¯ãããããé·æãšçæããããŸããé©åãªã¢ãããŒããéžæãããã¯ãã³ãŒãçæã¿ã¹ã¯ã®è€éããä¿å®æ§ã®èŠä»¶ãããã³æãŸããæœè±¡åã®ã¬ãã«ã«ãã£ãŠç°ãªããŸãã
| æ©èœ | ASTæäœ | ãã³ãã¬ãŒãã·ã¹ãã |
|---|---|---|
| è€éã | è€éãªå€æãåŠçã§ããŸãããã³ãŒãæ§é ã®ããæ·±ãçè§£ãå¿ èŠã§ãã | ãã¿ãŒã³ãäºåå®çŸ©ãããæ§é ã«åºã¥ããŠã³ãŒããçæããã®ã«æé©ã§ããåçŽãªã±ãŒã¹ã§ã¯ç®¡çã容æã§ãã |
| æœè±¡å | ããäœã¬ãã«ã§ãã³ãŒãçæã«å¯Ÿãããã现ããå¶åŸ¡ãæäŸããŸãã | ããé«ã¬ãã«ã§ãè€éãªã³ãŒãæ§é ãæœè±¡åãããã³ãã¬ãŒãã®å®çŸ©ã容æã«ããŸãã |
| ä¿å®æ§ | ASTæäœã®è€éãã®ãããä¿å®ãå°é£ã«ãªãããšããããŸããåºç€ãšãªãã³ãŒãã®æ§é ã«é¢ããæ·±ãç¥èãå¿ èŠã§ãã | é¢å¿ã®åé¢ïŒããžãã¯å¯ŸããŒã¿ïŒãå¯èªæ§ãåäžãããçµå床ãäœäžããããããäžè¬çã«ä¿å®ã容æã§ãã |
| ãŠãŒã¹ã±ãŒã¹ | ãã©ã³ã¹ãã€ã©ãã³ã³ãã€ã©ãé«åºŠãªã³ãŒããªãã¡ã¯ã¿ãªã³ã°ãè€éãªåæãšå€æã | èšå®ãã¡ã€ã«ã®çæãå埩çãªã³ãŒããããã¯ãããŒã¿ã仿§ã«åºã¥ãã³ãŒããåçŽãªã³ãŒãçæã¿ã¹ã¯ã |
é«åºŠãªã³ãŒãçæãã¯ããã¯
åºæ¬ãè¶ ããŠãé«åºŠãªãã¯ããã¯ã¯ã³ãŒãçæãããã«æ¹åããããšãã§ããŸãã
- ãã«ãã¹ããããšããŠã®ã³ãŒãçæïŒWebpackãGruntãGulpãªã©ã®ããŒã«ã䜿çšããŠãã³ãŒãçæããã«ãããã»ã¹ã«çµ±åããŸããããã«ãããçæãããã³ãŒããåžžã«ææ°ã§ããããšãä¿èšŒãããŸãã
- ãã©ã°ã€ã³ãšããŠã®ã³ãŒããžã§ãã¬ãŒã¿ïŒã³ãŒããçæãããã©ã°ã€ã³ãäœæããŠãæ¢åã®ããŒã«ãæ¡åŒµããŸããäŸãã°ãèšå®ãã¡ã€ã«ããã³ãŒããçæãããã«ãã·ã¹ãã çšã®ã«ã¹ã¿ã ãã©ã°ã€ã³ãäœæããŸãã
- åçã¢ãžã¥ãŒã«èªã¿èŸŒã¿ïŒå®è¡æã®æ¡ä»¶ãããŒã¿ã®å¯çšæ§ã«åºã¥ããŠãåçãªã¢ãžã¥ãŒã«ã®ã€ã³ããŒããŸãã¯ãšã¯ã¹ããŒããçæããããšãæ€èšããŸããããã«ãããã³ãŒãã®é©å¿æ§ãåäžããŸãã
- ã³ãŒãçæãšåœéåïŒi18nïŒïŒèšèªã®ããŒã«ã©ã€ãŒãŒã·ã§ã³ãå°åã®ããªãšãŒã·ã§ã³ãåŠçããã³ãŒããçæããŸããããã¯ã°ããŒãã«ãããžã§ã¯ãã«ãšã£ãŠäžå¯æ¬ ã§ãããµããŒããããŠããåèšèªçšã«åå¥ã®ãã¡ã€ã«ãçæããŸãã
- çæãããã³ãŒãã®ãã¹ãïŒçæãããã³ãŒããæ£ããã仿§ãæºãããŠããããšã確èªããããã«ã培åºçãªãŠããããã¹ããšçµ±åãã¹ããäœæããŸããèªåãã¹ãã¯éåžžã«éèŠã§ãã
ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã®ãŠãŒã¹ã±ãŒã¹ãšäŸ
ã³ãŒãçæã¯ãäžçäžã®å¹ åºãç£æ¥ãã¢ããªã±ãŒã·ã§ã³ã§äŸ¡å€ããããŸãïŒ
- åœéåãšããŒã«ã©ã€ãŒãŒã·ã§ã³ïŒè€æ°ã®èšèªãåŠçããããã®ã³ãŒããçæããŸããæ¥æ¬ãšãã€ãã®ãŠãŒã¶ãŒãã¿ãŒã²ããã«ãããããžã§ã¯ãã§ã¯ãæ¥æ¬èªãšãã€ãèªã®ç¿»èš³ã䜿çšããã³ãŒããçæã§ããŸãã
- ããŒã¿å¯èŠåïŒããŸããŸãªãœãŒã¹ïŒããŒã¿ããŒã¹ãAPIïŒããã®ããŒã¿ã«åºã¥ããŠãåçãªãã£ãŒããã°ã©ããæç»ããã³ãŒããçæããŸããç±³åœãè±åœãã·ã³ã¬ããŒã«ã®éèåžå Žã«å¯Ÿå¿ããã¢ããªã±ãŒã·ã§ã³ã§ã¯ãçºæ¿ã¬ãŒãã«åºã¥ããŠåçã«ãã£ãŒããäœæã§ããŸãã
- APIã¯ã©ã€ã¢ã³ãïŒOpenAPIãSwaggerã®ä»æ§ã«åºã¥ããŠãAPIçšã®JavaScriptã¯ã©ã€ã¢ã³ããäœæããŸããããã«ãããäžçäžã®éçºè ãã¢ããªã±ãŒã·ã§ã³ã§APIãµãŒãã¹ãç°¡åã«å©çšã»çµ±åã§ããããã«ãªããŸãã
- ã¯ãã¹ãã©ãããã©ãŒã éçºïŒåäžã®ãœãŒã¹ããç°ãªããã©ãããã©ãŒã ïŒWebãã¢ãã€ã«ããã¹ã¯ãããïŒçšã®ã³ãŒããçæããŸããããã«ãããã¯ãã¹ãã©ãããã©ãŒã ã®äºææ§ãåäžããŸãããã©ãžã«ãšã€ã³ãã®ãŠãŒã¶ãŒã«ãªãŒãããããšãç®æããããžã§ã¯ãã§ã¯ãã³ãŒãçæã䜿çšããŠç°ãªãã¢ãã€ã«ãã©ãããã©ãŒã ã«é©å¿ãããããšãã§ããŸãã
- æ§æç®¡çïŒç°å¢å€æ°ããŠãŒã¶ãŒèšå®ã«åºã¥ããŠèšå®ãã¡ã€ã«ãçæããŸããããã«ãããäžçäžã®éçºããã¹ããæ¬çªç°å¢ã§ç°ãªãæ§æãå¯èœã«ãªããŸãã
- ãã¬ãŒã ã¯ãŒã¯ãšã©ã€ãã©ãªïŒå€ãã®JavaScriptãã¬ãŒã ã¯ãŒã¯ãã©ã€ãã©ãªã¯ãããã©ãŒãã³ã¹ãåäžãããå®åçãªã³ãŒããåæžããããã«å éšã§ã³ãŒãçæã䜿çšããŠããŸãã
äŸïŒAPIã¯ã©ã€ã¢ã³ãã³ãŒãã®çæïŒ
ç°ãªãåœã®æ±ºæžã²ãŒããŠã§ã€ãšçµ±åããå¿ èŠãããeã³ããŒã¹ãã©ãããã©ãŒã ãæ§ç¯ããŠãããšæ³åããŠãã ãããã³ãŒãçæã䜿çšããŠã次ã®ãããªããšãã§ããŸãïŒ
- åæ±ºæžã²ãŒããŠã§ã€ïŒäŸïŒStripeãPayPalãååœã®ããŒã«ã«æ±ºæžææ®µïŒã«ç¹åããã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªãçæããã
- ãŠãŒã¶ãŒã®å Žæã«åºã¥ããŠé貚æç®ãçšèšç®ãèªåçã«åŠçããïŒi18nã䜿çšããŠåçã«å°åºïŒã
- ããã¥ã¡ã³ããšã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªãäœæãããªãŒã¹ãã©ãªã¢ãã«ããããã©ã³ã¹ãªã©ã®åœã®éçºè ã«ãšã£ãŠçµ±åãã¯ããã«å®¹æã«ããã
ãã¹ããã©ã¯ãã£ã¹ãšèæ ®äºé
ã³ãŒãçæã®å¹æãæå€§åããããã«ããããã®ãã¹ããã©ã¯ãã£ã¹ãèæ ®ããŠãã ããïŒ
- æç¢ºãªä»æ§ã®å®çŸ©ïŒå ¥åããŒã¿ãæãŸããåºåã³ãŒããããã³å€æã«ãŒã«ãæç¢ºã«å®çŸ©ããŸãã
- ã¢ãžã¥ãŒã«æ§ïŒã³ãŒããžã§ãã¬ãŒã¿ãã¢ãžã¥ãŒã«åŒã«èšèšããä¿å®ãšæŽæ°ã容æã«ãªãããã«ããŸããçæããã»ã¹ãããå°ãããåå©çšå¯èœãªã³ã³ããŒãã³ãã«åå²ããŸãã
- ãšã©ãŒåŠçïŒè§£æãèµ°æ»ãã³ãŒãçæäžã®ãšã©ãŒããã£ããããŠå ±åããããã®å ç¢ãªãšã©ãŒåŠçãå®è£ ããŸããæå³ã®ãããšã©ãŒã¡ãã»ãŒãžãæäŸããŸãã
- ããã¥ã¡ã³ãïŒå ¥å圢åŒãåºåã³ãŒããããã³å¶éäºé ãå«ããã³ãŒããžã§ãã¬ãŒã¿ã培åºçã«ææžåããŸãããžã§ãã¬ãŒã¿ãå ±æãããããšãæå³ããŠããå Žåã¯ãåªããAPIããã¥ã¡ã³ããäœæããŸãã
- ãã¹ãïŒã³ãŒãçæããã»ã¹ã®ãã¹ãŠã®ã¹ãããã«å¯ŸããŠèªåãã¹ããäœæãããã®ä¿¡é Œæ§ã確ä¿ããŸããçæãããã³ãŒããè€æ°ã®ããŒã¿ã»ãããšæ§æã§ãã¹ãããŸãã
- ããã©ãŒãã³ã¹ïŒã³ãŒãçæããã»ã¹ããããã¡ã€ãªã³ã°ããç¹ã«å€§èŠæš¡ãªãããžã§ã¯ãã§ã¯ããã©ãŒãã³ã¹ãæé©åããŸãã
- ä¿å®æ§ïŒã³ãŒãçæããã»ã¹ãã¯ãªãŒã³ã§ä¿å®ããããä¿ã¡ãŸããã³ãŒãã£ã³ã°æšæºãã³ã¡ã³ãã䜿çšããé床ã®è€éåãé¿ããŸãã
- ã»ãã¥ãªãã£ïŒã³ãŒãçæã®ãœãŒã¹ããŒã¿ã«æ³šæããŠãã ãããã»ãã¥ãªãã£ãªã¹ã¯ïŒäŸïŒã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ïŒãé¿ããããã«å ¥åãæ€èšŒããŸãã
ã³ãŒãçæã®ããã®ããŒã«ãšã©ã€ãã©ãª
ããŸããŸãªããŒã«ãã©ã€ãã©ãªãJavaScriptã®ã³ãŒãçæããµããŒãããŠããŸãã
- ASTã®è§£æãšæäœïŒ `acorn`ã`esprima`ã`babel`ïŒè§£æãšå€æçšïŒã`estraverse`ã
- ãã³ãã¬ãŒããšã³ãžã³ïŒ `Handlebars.js`ã`Mustache.js`ã`EJS`ã`Pug`ã`Nunjucks`ã
- ã³ãŒãçæïŒã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ïŒïŒ `escodegen`ã`astring`ã
- ãã«ãããŒã«ïŒ `Webpack`ã`Gulp`ã`Grunt`ïŒçæããã«ããã€ãã©ã€ã³ã«çµ±åããããïŒã
çµè«
JavaScriptã®ã³ãŒãçæã¯ãçŸä»£ã®ãœãããŠã§ã¢éçºã«ãšã£ãŠäŸ¡å€ã®ãããã¯ããã¯ã§ããASTæäœãéžæãããããã³ãã¬ãŒãã·ã¹ãã ãéžæãããã«ãããããããããã®ãã¯ããã¯ãç¿åŸããããšã§ãã³ãŒãã®èªååãã³ãŒãå質ã®åäžãçç£æ§ã®åäžã®ããã®å€§ããªå¯èœæ§ãéãããŸãããããã®æŠç¥ãåãå ¥ããããšã§ãã°ããŒãã«ãªç°å¢ã«é©ãããé©å¿æ§ãããå¹ççãªã³ãŒããœãªã¥ãŒã·ã§ã³ãäœæã§ããŸãããããžã§ã¯ãã§é·æçãªæåãåããããã«ã¯ããã¹ããã©ã¯ãã£ã¹ãé©çšããé©åãªããŒã«ãéžæããä¿å®æ§ãšãã¹ããåªå ããããšãå¿ããªãã§ãã ããã